package com.fs.controller.admin;

import com.fs.dto.ProductTagAddDTO;
import com.fs.entity.ProductTag;
import com.fs.result.Result;
import com.fs.service.ProductTagService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 商品标签管理 - 控制层
 * 路径：/admin/product/tag
 * 说明：标签的增删查（支持为商品添加多个标签、删除单个/批量标签、按商品ID查看标签）
 */
@RestController("adminProductTagController")
@RequestMapping("/admin/product/tag")
@Api(tags = "商品标签接口")
@Slf4j
public class ProductTagController {

    @Autowired
    private ProductTagService tagService;

    /**
     * 添加标签（单个或多个）
     * 示例：前端可以循环调用或一次性传多个请求（此处为单个 DTO）
     */
    @PostMapping("/add")
    @ApiOperation("为商品添加标签")
    public Result<String> addTag(@RequestBody ProductTagAddDTO dto) {
        log.info("请求 - 添加标签：{}", dto);
        tagService.addTag(dto);
        return Result.success("标签添加成功");
    }

    /**
     * 删除标签（单个）
     * 传入标签 id
     */
    @DeleteMapping("/delete/{id}")
    @ApiOperation("删除单个标签（按标签ID）")
    public Result<String> deleteById(@PathVariable Long id) {
        log.info("请求 - 删除标签 id={}", id);
        tagService.deleteById(id);
        return Result.success("标签删除成功");
    }

    /**
     * 删除某个商品的所有标签（或批量删除标签）
     * 接收路径：/admin/product/tag/deleteByProduct/1,2,3
     */
    @DeleteMapping("/deleteByProduct/{ids}")
    @ApiOperation("删除商品相关标签（按商品ID列表）")
    public Result<String> deleteByProductIds(@PathVariable("ids") String ids) {
        log.info("请求 - 删除商品标签，ids={}", ids);
        List<Long> idList = Arrays.stream(ids.split(","))
                .map(String::trim).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
        tagService.deleteByProductIds(idList);
        return Result.success("删除成功");
    }

    /**
     * 查看某个商品的标签列表
     */
    @GetMapping("/list/{productId}")
    @ApiOperation("查看商品的标签列表")
    public Result<List<ProductTag>> listByProduct(@PathVariable Long productId) {
        log.info("请求 - 查询商品标签 productId={}", productId);
        List<ProductTag> list = tagService.listByProductId(productId);
        return Result.success(list);
    }
}
